package xcache

import (
	"strings"
)

type CacheKey string // 为key返回的字符串设置一个别名，以便后续的扩展功能

// 为本缓存设置分组（若未设置则按照默认分组defaultGroup进行存储）
//
//	group	缓存分组名称
func (c *CacheKey) Group(group string) *CacheKey {
	k := string(*c)
	if strings.Contains(string(*c), ":") {
		// 剔除:及前面的字符
		k = string(*c)[strings.Index(string(*c), ":")+1:]
	}
	tmp := CacheKey(group + ":" + k)
	c = &tmp
	return c
}

// 直接设置缓存值
//
//	value	缓存值
func (c *CacheKey) Set(value any) error {
	return SetExt(*c, value, defaultExpr)
}

// 直接移除缓存值
func (c *CacheKey) Remove() error {
	return Remove(*c)
}

// 直接读取缓存
func (c *CacheKey) Get() string {
	return Get(*c)
}

// 直接读取结构体缓存
//
//	value	结构体指针
func (c *CacheKey) GetStruct(value any) error {
	return GetStruct(*c, value)
}

// 移除缓存分组
func (c *CacheKey) RemoveGroup() error {
	return RemoveGroup(*c)
}

// 判断缓存key是否存在
func (c *CacheKey) Exists() bool {
	return Exists(*c)
}
